import BaseModel from "../../base/baseModel.js";

/**
 * @description 购物车支付模型
 * @class {ShopCartPayModel}
 * @extends {BaseModel} 基础模型
 * @author hhx
 * @date 2024-12-2 15:12
 * @version 0.1.2
 */
export class ShopCartPayModel extends BaseModel {

    /**
     * @description 购物车商品总价
     * @private
     * @type {Number}
     */
    _total = undefined;

    /**
     * @description 购物车支付模型 构造函数
     * @public
     * @constructor
     * @param props {Object} 配置对象
     */
    constructor(props) {
        super(props);
    }

    /**
     * @description 实例化 商品支付模型
     * @public
     * @static
     * @param props {object} 配置对象
     * @returns {ShopCartPayModel|*} 商品支付模型
     */
    static instance(props = {}) {
        let instance = new ShopCartPayModel(props);
        instance.init(props);
        return instance;
    }

    //=========================== 内部成员 ===============================

    /**
     * @description 获取 总价
     * @property
     * @protected
     * @return {Number} 总价
     */
    get total() {
        return this._total;
    }

    /**
     * @description 设置 购物车总价
     * @property
     * @protected
     * @param total {Number} 购物车总价
     */
    set total(total) {
        this._total = total;
    }

    //=========================== 成员方法 ===============================

    //=========================== 基础属性 ===============================

    //=========================== 属性方法 ===============================

    //=========================== 接口方法 ===============================

    /**
     * @description 获取商品总价
     * @public
     * @return {Number} 商品总价
     */
    getTotal() {
        return this.total;
    }

    /**
     * @description 设置商品总价
     * @public
     * @param total {Number} 商品总价
     */
    setTotal(total) {
        this.total = total;
    }

    /**
     * @description 判断商品总价是否存在
     * @public
     * @return {Boolean} true 是 false 否
     */
    hasTotal() {
        return this.isNotEmpty(this.total);
    }

    //=========================== 创建方法 ===============================

    //=========================== 构建方法 ===============================


    //=========================== 重载方法 ===============================

    /**
     * @description 重载方法
     * @protected
     * @override
     */
    init(props) {

        super.init(props);

        this.total = 0;
    }

    //=========================== 内部方法 ===============================

    //=========================== 控制方法 ===============================

    //=========================== 事件订阅 ===============================

    //=========================== 事件触发 ===============================

    //=========================== 处理函数 ===============================

}